package site.wetsion.galio.sdk.common;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * galio Oauth2 本地系统上下文
 * 参考自spring security 的DefaultOAuth2ClientContext
 *
 * @author weixin
 * @version 1.0
 * @CLassName GalioOauthClientContext
 * @date 2019/3/8 4:45 PM
 */
public class GalioOauthClientContext implements OauthClientContext, Serializable {

    private static final long serialVersionUID = 5413912770157454726L;
    private GalioOauthAccessToken galioOauthAccessToken;

    private AccessTokenRequest galioAccessTokenRequest;

    private Map<String, Object> state = new HashMap<String, Object>();

    public GalioOauthClientContext() {
        this(new GalioAccessTokenRequest());
    }

    public GalioOauthClientContext(AccessTokenRequest rmsAccessTokenRequest) {
        this.galioAccessTokenRequest = rmsAccessTokenRequest;
    }

    public GalioOauthClientContext(GalioOauthAccessToken galioOauthAccessToken) {
        this.galioOauthAccessToken = galioOauthAccessToken;
        this.galioAccessTokenRequest = new GalioAccessTokenRequest();
    }

    @Override
    public GalioOauthAccessToken getAccessToken() {
        return galioOauthAccessToken;
    }

    @Override
    public void setAccessToken(GalioOauthAccessToken accessToken) {
        this.galioOauthAccessToken = accessToken;
        this.galioAccessTokenRequest.setExistingToken(accessToken);
    }

    @Override
    public AccessTokenRequest getAccessTokenRequest() {
        return galioAccessTokenRequest;
    }

    @Override
    public void setPreservedState(String stateKey, Object preservedState) {
        state.put(stateKey, preservedState);
    }

    @Override
    public Object removePreservedState(String stateKey) {
        return state.remove(stateKey);
    }
}
